package com.lekang.system.mapper;

import java.util.List;
import java.util.Map;
import com.lekang.system.domain.TaskArrangement;
import org.apache.ibatis.annotations.MapKey;

/**
 * 任务安排Mapper接口
 *
 * @author zhihao
 * @date 2025-10-14
 */
public interface TaskArrangementMapper
{
    /**
     * 查询任务安排
     * 
     * @param id 任务安排主键
     * @return 任务安排
     */
    Map<String, Object> selectTaskArrangementById(Long id);

    /**
     * 查询任务安排列表
     *
     * @param taskArrangement 任务安排
     * @return 任务安排集合
     */
    List<TaskArrangement> selectTaskArrangementList(TaskArrangement taskArrangement);

    /**
     * 多表联查任务安排列表
     *
     * @param params 查询参数
     * @return 任务安排集合
     */
    @MapKey("id")
    List<Map<String, Object>> selectTaskArrangementJoinList(Map<String, Object> params);

    /**
     * 查询任务安排详情（多表联查）
     * @param id 任务安排ID
     * @return 任务安排详情
     */
    Map<String, Object> selectTaskArrangementDetail(Long id);
    /**
     * 新增任务安排
     *
     * @param taskArrangement 任务安排
     * @return 结果
     */
    int insertTaskArrangement(TaskArrangement taskArrangement);

    /**
     * 修改任务安排
     *
     * @param taskArrangement 任务安排
     * @return 结果
     */
    int updateTaskArrangement(TaskArrangement taskArrangement);

    /**
     * 删除任务安排
     *
     * @param id 任务安排主键
     * @return 结果
     */
    int deleteTaskArrangementById(Long id);

    /**
     * 批量删除任务安排
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteTaskArrangementByIds(Long[] ids);

    @MapKey("id")
    List<Map<String, Object>> selectTaskArrangementJoinList1(Map<String, Object> params);

    /**
     * 根据状态查询任务安排列表
     *
     * @param params 查询参数
     * @return 任务安排列表
     */
    @MapKey("id")
    List<Map<String, Object>> selectTaskArrangementByStatus(Map<String, Object> params);

    /**
     * PC端：今日待执行任务列表（按服务时间升序），非超管传入executorId过滤
     */
    @MapKey("id")
    List<Map<String, Object>> selectPcTodayPending(Map<String, Object> params);

    /**
     * 取消任务
     *
     * @param params 取消参数
     * @return 结果
     */
    int cancelTask(Map<String, Object> params);

    /**
     * 执行任务
     *
     * @param params 执行参数
     * @return 结果
     */
    int executeTask(Map<String, Object> params);

    /**
     * 改期任务
     *
     * @param params 改期参数
     * @return 结果
     */
    int rescheduleTask(Map<String, Object> params);

    /**
     * 查询护理项目列表（用于搜索）
     *
     * @param params 查询参数
     * @return 护理项目列表
     */
    List<Map<String, Object>> selectNursingProjectsForSearch(Map<String, Object> params);

    /**
     * 生成护理计划内任务
     *
     * @param params 生成参数
     * @return 结果
     */
    int generateNursingPlanTasks(Map<String, Object> params);

    /**
     * 生成护理计划外任务
     *
     * @param params 生成参数
     * @return 结果
     */
    int generateNonNursingPlanTasks(Map<String, Object> params);

    /**
     * 根据执行周期生成任务
     *
     * @param params 生成参数
     * @return 结果
     */
    int generateTasksByCycle(Map<String, Object> params);

    /**
     * 统计任务总数
     * @return 任务总数
     */
    int countTotalTasks();

    /**
     * 统计护理员数量（去重）
     * @return 护理员数量
     */
    int countCaregivers();
}